package com.mall.module.system.service;

import com.mall.common.enums.LogoutReasonEnum;
import com.mall.module.system.domain.dto.LoginDto;
import com.mall.module.system.domain.dto.RegisterDto;
import com.mall.module.system.domain.dto.UserQueryDto;
import com.mall.module.system.domain.entity.SysUser;
import com.mall.module.system.domain.vo.LoginVo;
import com.mall.module.system.domain.vo.RegisterVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

public interface SysUserService {

   RegisterVo register(RegisterDto registerDto);

   LoginVo login(LoginDto loginDto);

   List<SysUser> list(Integer pageNum, Integer pageSize, UserQueryDto queryDto);

   String logout(HttpServletRequest request);

   String refreshToken(HttpServletRequest request);
   
   /**
    * 强制用户下线
    * @param userId 用户ID
    * @param reason 下线原因
    * @return 操作结果
    */
   String forceLogout(Long userId, LogoutReasonEnum reason);
   
   /**
    * 获取用户在线设备信息
    * @param userId 用户ID
    * @return 设备信息列表
    */
   List<Map<String, Object>> getUserOnlineDevices(Long userId);
   
   /**
    * 获取用户登出统计
    * @param userId 用户ID
    * @param days 统计天数
    * @return 登出统计信息
    */
   Map<String, Object> getLogoutStatistics(Long userId, int days);
   
   /**
    * 根据ID查询用户
    * @param id 用户ID
    * @return 用户信息
    */
   SysUser getUserById(Long id);
   
   /**
    * 根据条件查询用户列表
    * @param queryDto 查询条件
    * @return 用户列表
    */
   List<SysUser> getUserList(UserQueryDto queryDto);
   
   /**
    * 更新用户信息
    * @param userId 用户ID
    * @param user 用户信息
    */
   void updateUser(Long userId, SysUser user);
   
   /**
    * 更新用户状态
    * @param id 用户ID
    * @param status 状态
    * @param updaterId 更新人ID
    */
   void updateUserStatus(Long id, Integer status, Long updaterId);
   
   /**
    * 更新用户密码
    * @param id 用户ID
    * @param newPassword 新密码
    * @param updaterId 更新人ID
    */
   void updateUserPassword(Long id, String newPassword, Long updaterId);
   
   /**
    * 删除用户
    * @param id 用户ID
    * @param updaterId 删除人ID
    */
   void deleteUser(Long id, Long updaterId);
   
   /**
    * 批量删除用户
    * @param ids 用户ID列表
    * @param updaterId 删除人ID
    */
   void batchDeleteUsers(List<Long> ids, Long updaterId);
   
   /**
    * 统计用户数量
    * @param queryDto 查询条件
    * @return 用户数量
    */
   long countUsers(UserQueryDto queryDto);

   /**
    * 更新用户密码
    *
    */
   void updatePassword(Long userId, String newPassword);

}
